package com.shlh.saas.entity.twitter;

/**
 * Twitter Elasticsearch字段常量类
 * 对应twitter_users索引的字段映射
 */
public class EsTwitterFields {
    
    // ==================== 基础字段 ====================
    
    /**
     * Twitter用户ID
     */
    public static final String ID = "id";
    
    /**
     * 数据源表ID
     */
    public static final String SOURCE_ID = "source_id";
    
    /**
     * 数据源表名
     */
    public static final String SOURCE_TABLE = "source_table";
    
    /**
     * 数据有效性标识
     */
    public static final String VALID = "valid";
    
    /**
     * 数据迁移时间戳
     */
    public static final String MIGRATION_TIMESTAMP = "migration_timestamp";
    
    // ==================== 用户信息字段 ====================
    
    /**
     * 用户真实姓名
     */
    public static final String NAME = "name";
    
    /**
     * 用户屏幕名称（推特账号）
     */
    public static final String SCREEN_NAME = "screen_name";
    
    /**
     * 用户邮箱
     */
    public static final String EMAIL = "email";
    
    /**
     * 粉丝数量
     */
    public static final String FOLLOWERS = "followers";
    
    /**
     * 账户创建时间
     */
    public static final String CREATED_AT = "created_at";

    
    // ==================== 查询字段数组 ====================
    
    /**
     * 用于ES查询的字段列表
     */
    public static final String[] FIELD_QUERY = {
        ID,
        SOURCE_ID,
        SOURCE_TABLE,
        VALID,
        MIGRATION_TIMESTAMP,
        NAME,
        SCREEN_NAME,
        EMAIL,
        FOLLOWERS,
        CREATED_AT
    };
    
    /**
     * 用于两阶段查询的标识字段
     */
    public static final String[] IDENTIFIER_FIELDS = {
        SOURCE_TABLE,
        SOURCE_ID
    };
    
    /**
     * 用于搜索的核心字段
     */
    public static final String[] SEARCH_FIELDS = {
        NAME,
        SCREEN_NAME,
        EMAIL
    };
    
    /**
     * 用于筛选的数值字段
     */
    public static final String[] NUMERIC_FIELDS = {
        ID,
        SOURCE_ID,
        FOLLOWERS
    };
    
    /**
     * 用于筛选的日期字段
     */
    public static final String[] DATE_FIELDS = {
        CREATED_AT,
        MIGRATION_TIMESTAMP
    };
    
    /**
     * 用于精确匹配的关键字段
     */
    public static final String[] KEYWORD_FIELDS = {
        SCREEN_NAME,
        EMAIL,
        SOURCE_TABLE
    };
    
    /**
     * 用于全文搜索的文本字段
     */
    public static final String[] TEXT_FIELDS = {
        NAME
    };

    // ==================== 字段验证方法 ====================
    
    /**
     * 验证字段是否为有效的ES字段
     * 
     * @param fieldName 字段名
     * @return 是否为有效字段
     */
    public static boolean isValidField(String fieldName) {
        if (fieldName == null || fieldName.trim().isEmpty()) {
            return false;
        }
        
        for (String field : FIELD_QUERY) {
            if (field.equals(fieldName)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 验证字段是否为搜索字段
     * 
     * @param fieldName 字段名
     * @return 是否为搜索字段
     */
    public static boolean isSearchField(String fieldName) {
        if (fieldName == null || fieldName.trim().isEmpty()) {
            return false;
        }
        
        for (String field : SEARCH_FIELDS) {
            if (field.equals(fieldName)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 验证字段是否为关键字字段
     * 
     * @param fieldName 字段名
     * @return 是否为关键字字段
     */
    public static boolean isKeywordField(String fieldName) {
        if (fieldName == null || fieldName.trim().isEmpty()) {
            return false;
        }
        
        for (String field : KEYWORD_FIELDS) {
            if (field.equals(fieldName)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 验证字段是否为数值字段
     * 
     * @param fieldName 字段名
     * @return 是否为数值字段
     */
    public static boolean isNumericField(String fieldName) {
        if (fieldName == null || fieldName.trim().isEmpty()) {
            return false;
        }
        
        for (String field : NUMERIC_FIELDS) {
            if (field.equals(fieldName)) {
                return true;
            }
        }
        return false;
    }
    
    /**
     * 验证字段是否为日期字段
     * 
     * @param fieldName 字段名
     * @return 是否为日期字段
     */
    public static boolean isDateField(String fieldName) {
        if (fieldName == null || fieldName.trim().isEmpty()) {
            return false;
        }
        
        for (String field : DATE_FIELDS) {
            if (field.equals(fieldName)) {
                return true;
            }
        }
        return false;
    }
    
    // ==================== 私有构造函数 ====================
    
    /**
     * 私有构造函数，防止实例化
     */
    private EsTwitterFields() {
        throw new UnsupportedOperationException("无法实例化");
    }
}
